package main

import "fmt"

func main() {
	//var p *int
	//a := 10
	//p = &a
	//fmt.Println(p)

	//对于指针来说或者其他的默认值是0的情况来说 ，如何一开始申请的时候就分配内存
	var p *int = new(int)
	*p = 10
	fmt.Println(&p)

	//int使用make就不行
	//除了new函数可以申请内存以外，还有一个函数就是make,更加常用的是make函数 make函数一般用于切片 map
	var info map[string]string = make(map[string]string) //使用这个方法初始化map默认值不是nil
	info["c"] = "hcj"
	//new函数返回的是这个值的地址 指针 make函数返回的是指定的类型实例

	//以下这段代码会报错 是因为在使用这个方法初始化map的时候的map的默认值是nil
	//var info1 map[string]string
	//info1["b"] = "c"
	//fmt.Println(info1)

	//python中的None和go语言中的nil类型不一样，None是全局唯一的
	//go语言中nil是唯一可以用来表示部分类型零值的标识符，它可以代表许多不同内存布局的值

	//var p *int 使用这种方法去定义指针,会有内存去保存p变量,但是p变量中的值是nil,不会指向内存空间
	//var p *int = new(int) 使用这种方法去定义指针,p中保留的是指针指向的内存空间的地址,指向的内存空间中保存的是0
	var p2 *[3]int
	fmt.Println(p2)

	var p3 *[3]int = new([3]int)
	fmt.Println(p3)
	*p3 = [3]int{1, 2, 3}
	fmt.Println(*p3)
}
